<?php

namespace PolarisbackEndFrameRe\engine;

class MarkdownRenderer
{
    /**
     * 将 Markdown 文本转换为 HTML
     *
     * @param string $markdown
     * @return string
     */
    public function render(string $markdown): string
    {
        // 处理标题
        $html = preg_replace('/^(#{1,6})\s*(.*)$/m', '<h$1>$2</h$1>', $markdown);

        // 处理段落
        $html = preg_replace('/^(?!<h)(?!<ul)(?!<ol)(?!<li)(?!<p)(?!<\/p>)(?!<br\/?>)(.*)$/m', '<p>$1</p>', $html);

        // 处理加粗
        $html = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $html);
        $html = preg_replace('/__(.*?)__/', '<strong>$1</strong>', $html);

        // 处理斜体
        $html = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $html);
        $html = preg_replace('/_(.*?)_/', '<em>$1</em>', $html);

        // 处理无序列表
        $html = preg_replace('/^\* (.*)$/m', '<li>$1</li>', $html);
        $html = preg_replace('/^-\s+(.*)$/m', '<li>$1</li>', $html);
        $html = preg_replace('/(<li>.*?<\/li>)/s', '<ul>$1</ul>', $html);

        // 处理有序列表
        $html = preg_replace('/^\d+\.\s+(.*)$/m', '<li>$1</li>', $html);
        $html = preg_replace('/(<li>.*?<\/li>)/s', '<ol>$1</ol>', $html);

        // 处理换行
        $html = str_replace("\n", '<br/>', $html);

        return $html;
    }
}